home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1997-01-29 | 3.2 KB | 146 lines |
- 10 'PRIMENOS - 23 NOV 85 rev. 18 DEC 96
- 20 IF EX$=""THEN EX$="EXIT"
- 30 CLS:KEY OFF
- 40 DIM A(255)
- 50 DIM A#(255)
- 60 COLOR 7,0,5
- 70 '
- 80 '.....start
- 90 CLS
- 100 COLOR 15,1
- 110 PRINT " PRIME NUMBERS";TAB(61);"by George C. Murphy ";
- 120 COLOR 5,0:PRINT STRING$(80,223);
- 130 COLOR 7,0
- 140 PRINT TAB(9);
- 150 PRINT "A prime number is a number evenly divisible only by itself and"
- 160 PRINT TAB(9);
- 170 PRINT "the number 1, and not by any other integer (whole number)."
- 180 PRINT
- 190 PRINT STRING$(80,205);
- 200 LOCATE 8:PRINT TAB(25)"PRIME NUMBERS AND FACTORS":PRINT
- 210 PRINT TAB(25)"Press number in < > to:"
- 220 PRINT
- 230 PRINT TAB(25)"< 1 > Find prime numbers"
- 240 PRINT TAB(25)"< 2 > Find prime factors of a number"
- 250 PRINT
- 260 PRINT TAB(25)"< 0 > EXIT"
- 270 Z$=INKEY$
- 280 IF Z$="0"THEN CLS:RUN EX$
- 290 IF Z$="1"THEN 330
- 300 IF Z$="2"THEN 850
- 310 GOTO 270
- 320 '
- 330 '.....prime numbers
- 340 LOCATE 20,1:INPUT "ENTER: From: first number...";N:NN=N
- 350 IF N<1 THEN LOCATE CSRLIN-1:PRINT SPC(40):GOTO 340
- 360 INPUT "ENTER: To: last number....";L
- 370 IF N>999999 OR L>999999 THEN 380 ELSE 410
- 380 BEEP:PRINT :PRINT "Sorry! I only do numbers less than 1 million!"
- 390 GOTO 810
- 400 '
- 410 '.....calculate
- 420 W=0:Q=L-N+1:DIM M(Q+10)
- 430 IF N>3 AND (N/2=INT(N/2))THEN N=N+1
- 440 IF N<=3 THEN FOR Z=N TO 3:W=W+1:M(W)=Z:NEXT Z:N=5
- 450 V=SQR(N):Y=3
- 460 VIEW PRINT 3 TO 24:CLS:VIEW PRINT
- 470 LOCATE 1,16:PRINT " Countdown....";L-N;
- 480 X=N/Y:IF X=1 THEN W=W+1:M(W)=N
- 490 IF X=INT(X)THEN 520
- 500 IF Y<=V THEN Y=Y+2:GOTO 480
- 510 W=W+1:M(W)=N
- 520 N=N+2:IF N<=L THEN 450
- 530 LOCATE 1,16:COLOR 0,1:PRINT STRING$(30,32)
- 540 COLOR 7,0
- 550 '
- 560 PRINT
- 570 U$="####,###"
- 580 A=LEN(STR$(L))
- 590 Y$="":FOR R=1 TO A:Y$="#"+Y$
- 600 IF A>3 AND LEN(Y$)=3 THEN Y$=","+Y$
- 610 NEXT R
- 620 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
- 630 PRINT " Prime numbers from";USING Y$;NN;
- 640 PRINT " to";
- 650 PRINT USING Y$;L;
- 660 PRINT " are:"
- 670 PRINT STRING$(80,205);
- 680 Y=INT(W/10):IF W/10>Y THEN Y=Y+1
- 690 LN=4 'default line number
- 700 '
- 710 FOR Z=1 TO Y
- 720 LN=LN+1
- 730 PRINT USING U$;M(Z);
- 740 FOR X=1 TO 9:C=M(Z+X*Y)
- 750 IF C=0 THEN PRINT "":GOTO 790
- 760 PRINT USING U$;C;
- 770 NEXT X
- 780 IF LN=23 THEN GOSUB 1330:LN=0:CLS
- 790 NEXT Z
- 800 '
- 810 '.....return to menu
- 820 GOSUB 1330
- 830 GOTO 80 'start
- 840 '
- 850 '.....factors
- 860 X=2
- 870 LOCATE 20:INPUT "ENTER: Number to be factored ";B#
- 880 B#=ABS(B#):W#=B#:Y=0
- 890 VIEW PRINT 3 TO 24:CLS:VIEW PRINT
- 900 LOCATE 1,16:PRINT " Countdown...."
- 910 IF W#/2=INT(W#/2)THEN X=2:GOTO 960
- 920 C#=SQR(W#):D=3
- 930 M#=INT(C#+2-D)
- 940 E#=W#/D:IF E#=INT(E#)THEN X=D:GOTO 960
- 950 LOCATE 1,30:PRINT B#-X;" "
- 960 V#=W#/X:IF V#=INT(V#)THEN Y=Y+1:A#(Y)=X:W#=V#:GOTO 910
- 970 IF X=2 THEN X=1
- 980 IF V#>1 THEN X=X+2:GOTO 910
- 990 LOCATE 1,16:COLOR 0,1:PRINT STRING$(30,32)
- 1000 COLOR 7,0
- 1010 '
- 1020 '.....print
- 1030 X=LEN(STR$(B#))
- 1040 N=CINT(X/3)
- 1050 Y$=STRING$(X+N-1,"#")
- 1060 IF B#>999 THEN MID$(Y$,X-3,1)=","
- 1070 VIEW PRINT 3 TO 24:CLS:VIEW PRINT
- 1080 LOCATE 11,34:PRINT CHR$(25)
- 1090 LOCATE 10,24:COLOR 0,7:PRINT " Prime factors";
- 1100 COLOR 7,0:PRINT " of";:PRINT USING Y$;B#;
- 1110 PRINT " are:":PRINT
- 1120 T#=1:U=1:FOR Z=1 TO Y
- 1130 IF A#(Z)=A#(Z+1)THEN U=U+1:GOTO 1150
- 1140 GOSUB 1210:U=1
- 1150 NEXT Z
- 1160 LOCATE 23,22
- 1170 J$=CHR$(34) 'double quote mark
- 1180 PRINT "NOTE: ^ signifies ";J$;"to the power of";J$
- 1190 LN=14:GOTO 810
- 1200 '
- 1210 '.....format display
- 1220 T#=T#*A#(Z)^U
- 1230 Z$="multiplied by":IF T#=B# THEN Z$=""
- 1240 U$=STR$(U)
- 1250 COLOR 0,7
- 1260 LOCATE CSRLIN,35-LEN(Y$):PRINT USING Y$;A#(Z);
- 1270 COLOR 7,0
- 1280 PRINT " ^";U$;" =";
- 1290 PRINT USING Y$;T#;
- 1300 PRINT " ";Z$
- 1310 RETURN
- 1320 '
- 1330 'HARDCOPY
- 1340 GOSUB 1450:LOCATE 25,2:COLOR 14,6
- 1350 PRINT " Press 1 to print screen, 2 to print screen & ";
- 1360 PRINT "advance paper, or 3 to continue.";:COLOR 7,0
- 1370 Z$=INKEY$:IF Z$="3"THEN GOSUB 1450:RETURN
- 1380 IF Z$="1"OR Z$="2"THEN GOSUB 1450:GOTO 1400
- 1390 GOTO 1370
- 1400 FOR QX=1 TO 24:FOR QY=1 TO 80
- 1410 LPRINT CHR$(SCREEN(QX,QY));
- 1420 NEXT QY:NEXT QX
- 1430 IF Z$="2"THEN LPRINT CHR$(12)
- 1440 GOTO 1340
- 1450 LOCATE 25,1:PRINT STRING$(80,32);:RETURN
-